package com.example.mp_test.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mp_test.entity.User;
import com.example.mp_test.mapper.UserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



@Service("UserService")
public class UserService {
    @Resource
    private UserMapper userMapper;

    // 查询条件
    // 查询内容如果没有姓名，输出年龄小于20的人
    // 邮箱约束条件可以自己添加
    public List<User> query(User user) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // eq 等于，ne 不等于，gt 大于，lt 小于， ge 大于等于，le 小于等于
        queryWrapper.isNotNull("name")
//                .eq("email","test2@airui.com")
                .lt("age", 20);
        List<User> queryList = userMapper.selectList(queryWrapper);
        return queryList;
    }

//    public List<User> query(User user) {
//        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//
//        if (user.getName() != null) {
//            queryWrapper.eq("name", "Jack"); // user.getName()
//        }
//
//        if (user.getEmail() != null) {
//            queryWrapper.eq("email", "test2@airui.com"); // user.getEmail()
//        }
//
//        if (user.getAge() != null) {
//            queryWrapper.lt("age", 30); // user.getAge()
//        }
//
//        List<User> list = userMapper.selectList(queryWrapper);
//        return list;
//    }


    //用户全部查询，既然是全部用户，就不应输入具体条件了
    public List<User> queryUser() {
        return userMapper.selectList(null);
    }

    //单个用户查询，这里的传入参数是用户的ID号，我用了实体，实体中的id属性是我传入的ID号，这里可以自己改入参的
    public User queryUserById(User userId) {
        //单个用户查询
//        User list = userMapper.selectById(user.getId());
        User list = userMapper.selectById(1);
        return list;
    }

    //多个用户查询，多个用户和上面的也一样，自己可以更改入参的
    public List<User> queryUserBatchIds(List<Long> userIds) {
        //(多用户查询)
        List<User> usersList = userMapper.selectBatchIds(userIds);
        return usersList;
    }

    //条件查询，需要用Map集合，key对应数据库的字段，而value则对应数据库字段中的值，很好理解
    public List<User> queryUserByMap(User user) {
        Map<String, Object> map = new HashMap<>();
        //定义查询条件，比如我们查询姓名是Jack，还有年龄是20岁的用户信息
        map.put("name", "Jack");
        map.put("age", 20);
        List<User> list = userMapper.selectByMap(map);
        return list;
    }

    //分页查询，这一块一定要引入Mybatis-plus的分页插件，也就是MybatisPlusConfig类，不然没效果
    public List<User> queryUserPage(Long current, Long size) {
        Page<User> page = new Page<>(current,size);
        userMapper.selectPage(page, null);
        List<User> list = page.getRecords();
        return list;
    }

    //模糊查询，这里条件构造器是一个很重要的点，QueryWrapper可以将自己想要的条件添加进去进行查询
    public List<Map<String, Object>> queryUserLike(User user) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", "o").like("age", "1");
        return userMapper.selectMaps(queryWrapper);
    }

    //增加用户,这里要设置主键自增，而且这里的ID生成用了一种雪花算法，我觉得很好
    public int addUser(User user) {
        return userMapper.insert(user);
    }

    //根据传入的用户ID更新用户
    public int updateUser(User user) {
        return userMapper.updateById(user);
    }

    //根据传入的用户ID删除用户
    public int deleteUser(User user) {
        return userMapper.deleteById((Serializable) user.getId());
    }
}
